home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / xfs_dir_sf.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  7KB  |  179 lines

  1. /*
  2.  * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef __XFS_DIR_SF_H__
  33. #define    __XFS_DIR_SF_H__
  34.  
  35. /*
  36.  * Directory layout when stored internal to an inode.
  37.  *
  38.  * Small directories are packed as tightly as possible so as to
  39.  * fit into the literal area of the inode.
  40.  */
  41.  
  42. typedef struct { __uint8_t i[sizeof(xfs_ino_t)]; } xfs_dir_ino_t;
  43.  
  44. /*
  45.  * The parent directory has a dedicated field, and the self-pointer must
  46.  * be calculated on the fly.
  47.  *
  48.  * Entries are packed toward the top as tight as possible.  The header
  49.  * and the elements much be memcpy'd out into a work area to get correct
  50.  * alignment for the inode number fields.
  51.  */
  52. typedef struct xfs_dir_shortform {
  53.     struct xfs_dir_sf_hdr {        /* constant-structure header block */
  54.         xfs_dir_ino_t parent;    /* parent dir inode number */
  55.         __uint8_t count;    /* count of active entries */
  56.     } hdr;
  57.     struct xfs_dir_sf_entry {
  58.         xfs_dir_ino_t inumber;    /* referenced inode number */
  59.         __uint8_t namelen;    /* actual length of name (no NULL) */
  60.         __uint8_t name[1];    /* name */
  61.     } list[1];            /* variable sized array */
  62. } xfs_dir_shortform_t;
  63. typedef struct xfs_dir_sf_hdr xfs_dir_sf_hdr_t;
  64. typedef struct xfs_dir_sf_entry xfs_dir_sf_entry_t;
  65.  
  66. /*
  67.  * We generate this then sort it, so that readdirs are returned in
  68.  * hash-order.  Else seekdir won't work.
  69.  */
  70. typedef struct xfs_dir_sf_sort {
  71.     __uint8_t    entno;        /* .=0, ..=1, else entry# + 2 */
  72.     __uint8_t    seqno;        /* sequence # with same hash value */
  73.     __uint8_t    namelen;    /* length of name value (no null) */
  74.     xfs_dahash_t    hash;        /* this entry's hash value */
  75.     xfs_intino_t    ino;        /* this entry's inode number */
  76.     char        *name;        /* name value, pointer into buffer */
  77. } xfs_dir_sf_sort_t;
  78.  
  79. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR_SF_GET_DIRINO)
  80. void xfs_dir_sf_get_dirino_arch(xfs_dir_ino_t *from, xfs_ino_t *to, xfs_arch_t arch);
  81. void xfs_dir_sf_get_dirino(xfs_dir_ino_t *from, xfs_ino_t *to);
  82. #define    XFS_DIR_SF_GET_DIRINO_ARCH(from,to,arch)    xfs_dir_sf_get_dirino_arch(from, to, arch)
  83. #define    XFS_DIR_SF_GET_DIRINO(from,to)            xfs_dir_sf_get_dirino(from, to)
  84. #else
  85. #define    XFS_DIR_SF_GET_DIRINO_ARCH(from,to,arch)    DIRINO_COPY_ARCH(from,to,arch)
  86. #define    XFS_DIR_SF_GET_DIRINO(from,to)                DIRINO_COPY_ARCH(from,to,ARCH_NOCONVERT)
  87. #endif
  88. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR_SF_PUT_DIRINO)
  89. void xfs_dir_sf_put_dirino_arch(xfs_ino_t *from, xfs_dir_ino_t *to, xfs_arch_t arch);
  90. void xfs_dir_sf_put_dirino(xfs_ino_t *from, xfs_dir_ino_t *to);
  91. #define    XFS_DIR_SF_PUT_DIRINO_ARCH(from,to,arch)    xfs_dir_sf_put_dirino_arch(from, to, arch)
  92. #define    XFS_DIR_SF_PUT_DIRINO(from,to)            xfs_dir_sf_put_dirino(from, to)
  93. #else
  94. #define    XFS_DIR_SF_PUT_DIRINO_ARCH(from,to,arch)    DIRINO_COPY_ARCH(from,to,arch)
  95. #define    XFS_DIR_SF_PUT_DIRINO(from,to)                DIRINO_COPY_ARCH(from,to,ARCH_NOCONVERT)
  96. #endif
  97. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR_SF_ENTSIZE_BYNAME)
  98. int xfs_dir_sf_entsize_byname(int len);
  99. #define XFS_DIR_SF_ENTSIZE_BYNAME(len)        xfs_dir_sf_entsize_byname(len)
  100. #else
  101. #define XFS_DIR_SF_ENTSIZE_BYNAME(len)        /* space a name uses */ \
  102.     ((uint)sizeof(xfs_dir_sf_entry_t)-1 + (len))
  103. #endif
  104. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR_SF_ENTSIZE_BYENTRY)
  105. int xfs_dir_sf_entsize_byentry(xfs_dir_sf_entry_t *sfep);
  106. #define XFS_DIR_SF_ENTSIZE_BYENTRY(sfep)    xfs_dir_sf_entsize_byentry(sfep)
  107. #else
  108. #define XFS_DIR_SF_ENTSIZE_BYENTRY(sfep)    /* space an entry uses */ \
  109.     ((uint)sizeof(xfs_dir_sf_entry_t)-1 + (sfep)->namelen)
  110. #endif
  111. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR_SF_NEXTENTRY)
  112. xfs_dir_sf_entry_t *xfs_dir_sf_nextentry(xfs_dir_sf_entry_t *sfep);
  113. #define XFS_DIR_SF_NEXTENTRY(sfep)        xfs_dir_sf_nextentry(sfep)
  114. #else
  115. #define XFS_DIR_SF_NEXTENTRY(sfep)        /* next entry in struct */ \
  116.     ((xfs_dir_sf_entry_t *) \
  117.         ((char *)(sfep) + XFS_DIR_SF_ENTSIZE_BYENTRY(sfep)))
  118. #endif
  119. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR_SF_ALLFIT)
  120. int xfs_dir_sf_allfit(int count, int totallen);
  121. #define XFS_DIR_SF_ALLFIT(count,totallen)    \
  122.     xfs_dir_sf_allfit(count,totallen)
  123. #else
  124. #define XFS_DIR_SF_ALLFIT(count,totallen)    /* will all entries fit? */ \
  125.     ((uint)sizeof(xfs_dir_sf_hdr_t) + \
  126.            ((uint)sizeof(xfs_dir_sf_entry_t)-1)*(count) + (totallen))
  127. #endif
  128.  
  129. #if defined(XFS_DIR_TRACE)
  130.  
  131. /*
  132.  * Kernel tracing support for directories.
  133.  */
  134. struct uio;
  135. struct xfs_inode;
  136. struct xfs_da_intnode;
  137. struct xfs_dinode;
  138. struct xfs_dir_leafblock;
  139. struct xfs_dir_leaf_entry;
  140.  
  141. #define    XFS_DIR_TRACE_SIZE    4096    /* size of global trace buffer */
  142. extern ktrace_t    *xfs_dir_trace_buf;
  143.  
  144. /*
  145.  * Trace record types.
  146.  */
  147. #define    XFS_DIR_KTRACE_G_DU    1    /* dp, uio */
  148. #define    XFS_DIR_KTRACE_G_DUB    2    /* dp, uio, bno */
  149. #define    XFS_DIR_KTRACE_G_DUN    3    /* dp, uio, node */
  150. #define    XFS_DIR_KTRACE_G_DUL    4    /* dp, uio, leaf */
  151. #define    XFS_DIR_KTRACE_G_DUE    5    /* dp, uio, leaf entry */
  152. #define    XFS_DIR_KTRACE_G_DUC    6    /* dp, uio, cookie */
  153.  
  154. void xfs_dir_trace_g_du(char *where, struct xfs_inode *dp, struct uio *uio);
  155. void xfs_dir_trace_g_dub(char *where, struct xfs_inode *dp, struct uio *uio,
  156.                   xfs_dablk_t bno);
  157. void xfs_dir_trace_g_dun(char *where, struct xfs_inode *dp, struct uio *uio,
  158.                   struct xfs_da_intnode *node);
  159. void xfs_dir_trace_g_dul(char *where, struct xfs_inode *dp, struct uio *uio,
  160.                   struct xfs_dir_leafblock *leaf);
  161. void xfs_dir_trace_g_due(char *where, struct xfs_inode *dp, struct uio *uio,
  162.                   struct xfs_dir_leaf_entry *entry);
  163. void xfs_dir_trace_g_duc(char *where, struct xfs_inode *dp, struct uio *uio,
  164.                   xfs_off_t cookie);
  165. void xfs_dir_trace_enter(int type, char *where,
  166.                  void *a0, void *a1, void *a2, void *a3,
  167.                  void *a4, void *a5, void *a6, void *a7,
  168.                  void *a8, void *a9, void *a10, void *a11);
  169. #else
  170. #define    xfs_dir_trace_g_du(w,d,u)
  171. #define    xfs_dir_trace_g_dub(w,d,u,b)
  172. #define    xfs_dir_trace_g_dun(w,d,u,n)
  173. #define    xfs_dir_trace_g_dul(w,d,u,l)
  174. #define    xfs_dir_trace_g_due(w,d,u,e)
  175. #define    xfs_dir_trace_g_duc(w,d,u,c)
  176. #endif /* DEBUG */
  177.  
  178. #endif    /* __XFS_DIR_SF_H__ */
  179.